/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package JeuDeLaVie;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.UIManager;
import javax.swing.border.Border;

/**
 * Classe pour la grille aux cases carrées (des fois qu'un
 * miracle survienne et qu'on ait le temps de faire celle
 * aux cases hexagonales)
 * @author
 */
public class FenetreCasesRect extends Fenetre
{
    //-------------------------------------
    //La grille : Un tableau de CaseGrille
    //-------------------------------------
    protected CaseGrille[][] grille;

    
    public FenetreCasesRect(Environnement env, Controleur contr){
        super(env, contr);
        
    }
    
    
    @Override
        protected void construireGrille(int nbLargeur, int nbHauteur)
    {
        grille = new CaseGrille[nbLargeur][nbHauteur];

        for (int i = 0; i < nbLargeur; i++)
        {
            for (int j = 0; j < nbHauteur; j++)
            {
                //-------------------------
                //Création des coordonnées
                //-------------------------
                Point nouvCoord = new Point();
                nouvCoord.x = i;
                nouvCoord.y = j;

                //---------------------
                //Création du listener
                //---------------------
                final int xCase = i;
                final int yCase = j;

                MouseAdapter listenerSouris = new MouseAdapter()
                {
                    //Commodité : Entoure d'une bordure plus épaisse la case survolée
                    @Override
                    public void mouseEntered(MouseEvent arg0)
                    {
                        lienContr.caseSurvolee(grille[xCase][yCase]);
                    }

                    @Override
                    public void mouseExited(MouseEvent arg0)
                    {
                        lienContr.caseSurvoleeQuittee(grille[xCase][yCase]);
                    }

                    @Override
                    public void mouseClicked(MouseEvent arg0)
                    {
                        //L'utilisateur a cliqué ! Le fou ! On prévient le contrôleur immédiatement
                        Point coordonnees = new Point(xCase, yCase);
                        lienContr.actionPerformedClick(coordonnees);
                    }
                };
                
                //------------------------------------------------------
                // Création de la case et ajout de celle-ci à la grille
                //------------------------------------------------------
                grille[i][j] = new CaseGrille(nouvCoord, listenerSouris);
                principal.add(grille[i][j]);

            }
        }
        //On met la grille dans le frame
        frame.add(principal, BorderLayout.CENTER);

    }
        
    @Override
    public  void majGrille()
    {
        int i, j;
        int tailleGrille = lienEnv.getGrille().length;
        for (i = 0; i < tailleGrille; i++)
        {
            for (j = 0; j < tailleGrille; j++)
            {
                //pis aller en attendant les gens
                if (lienEnv.getGrille()[i][j].getEtatCourant())
                {
                    grille[i][j].setBackground(Color.red);
                } else
                {
                    grille[i][j].setBackground(UIManager.getColor("Panel.background"));
                }
            }
            System.out.print("\n");
        }
    }

    /**
     * Met à jour l'affichage de la case dont on a passé les coordonnées
     *
     * @param coord Coordonnées de la case à mettre à jour
     */
    @Override
    public void majCase(Point coord)
    {
        if (lienEnv.getGrille()[coord.x][coord.y].getEtatCourant())
        {
            grille[coord.x][coord.y].setBackground(Color.red);
        } else
        {
            grille[coord.x][coord.y].setBackground(UIManager.getColor("Panel.background"));
        }
    }    
    
    @Override
    public void afficheBordsMotif(MotifEnv motif, Border bordure, Point coord){
        int xTab, yTab;
        for(int i = 0; i<motif.getTabMotif().length; i++){
            for (int j = 0; j < motif.getTabMotif()[i].length; j++)
            {
                xTab = coord.x + i;
                yTab = coord.y + j;
                if (!((xTab >= grille.length) || (yTab >= grille[i].length)))
                {
                    if(motif.getTabMotif()[i][j].getEtatCourant()){
                    grille[xTab][yTab].setBorder(bordure);

                    }
                }
            }
        }
    }
}
